package com.basket.general;
import java.io.IOException;
import java.net.URI;
import java.util.List;
import org.springframework.http.ContentCodingType;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.client.ClientHttpRequest;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import android.app.Application;
import com.octo.android.robospice.SpringAndroidSpiceService;
import com.octo.android.robospice.persistence.CacheManager;
import com.octo.android.robospice.persistence.binary.InFileInputStreamObjectPersister;
import com.octo.android.robospice.persistence.exception.CacheCreationException;
import com.octo.android.robospice.persistence.springandroid.json.jackson.JacksonObjectPersisterFactory;
import com.octo.android.robospice.persistence.string.InFileStringObjectPersister;
public class CarJsonSpringAndroidSpiceService extends SpringAndroidSpiceService{
private static final int WEBSERVICES_TIMEOUT = 10000;
@Override
public RestTemplate createRestTemplate() {
RestTemplate restTemplate = new RestTemplate() {
@Override
protected ClientHttpRequest createRequest( URI url, HttpMethod method ) throws IOException {
ClientHttpRequest request = super.createRequest( url, method );
HttpHeaders headers = request.getHeaders();
headers.setAcceptEncoding( ContentCodingType.GZIP );
return request;
}
};
// bug on http connection for Android < 2.2
// http://android-developers.blogspot.fr/2011/09/androids-http-clients.html
// but still a problem for upload with Spring-android on android 4.1
System.setProperty( "http.keepAlive", "false" );
// set timeout for requests
ClientHttpRequestFactory factory = restTemplate.getRequestFactory();
if ( factory instanceof HttpComponentsClientHttpRequestFactory ) {
HttpComponentsClientHttpRequestFactory advancedFactory = (HttpComponentsClientHttpRequestFactory) factory;
advancedFactory.setConnectTimeout( WEBSERVICES_TIMEOUT );
advancedFactory.setReadTimeout( WEBSERVICES_TIMEOUT );
} else if ( factory instanceof SimpleClientHttpRequestFactory ) {
SimpleClientHttpRequestFactory advancedFactory = (SimpleClientHttpRequestFactory) factory;
advancedFactory.setConnectTimeout( WEBSERVICES_TIMEOUT );
advancedFactory.setReadTimeout( WEBSERVICES_TIMEOUT );
}
// web services support json responses
MappingJacksonHttpMessageConverter jsonConverter = new MappingJacksonHttpMessageConverter();
FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
final List< HttpMessageConverter< ? >> listHttpMessageConverters = restTemplate.getMessageConverters();
listHttpMessageConverters.add( jsonConverter );
listHttpMessageConverters.add( formHttpMessageConverter );
listHttpMessageConverters.add( stringHttpMessageConverter );
restTemplate.setMessageConverters( listHttpMessageConverters );
return restTemplate;
}
@Override
public CacheManager createCacheManager(Application application)
throws CacheCreationException {
CacheManager cacheManager = new CacheManager();
// init
InFileStringObjectPersister inFileStringObjectPersister = new InFileStringObjectPersister( application );
InFileInputStreamObjectPersister inFileInputStreamObjectPersister = new InFileInputStreamObjectPersister( application );
JacksonObjectPersisterFactory inJSonFileObjectPersisterFactory = new JacksonObjectPersisterFactory( application );
inFileStringObjectPersister.setAsyncSaveEnabled( true );
inFileInputStreamObjectPersister.setAsyncSaveEnabled( true );
inJSonFileObjectPersisterFactory.setAsyncSaveEnabled( true );
cacheManager.addPersister( inFileStringObjectPersister );
cacheManager.addPersister( inFileInputStreamObjectPersister );
cacheManager.addPersister( inJSonFileObjectPersisterFactory );
return cacheManager;
}
}